﻿using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace ZTZP_BEMSS_WPF
{
    /// <summary>
    /// 表示评标基准价的实体类，用于存储不同参数下的基准价信息
    /// 实现了 INotifyPropertyChanged 接口，支持属性变更通知
    /// </summary>
    public class BasePriceEntry : INotifyPropertyChanged
    {
        /// <summary>
        /// 带参数的构造函数，方便创建 BasePriceEntry 实例并初始化属性值
        /// </summary>
        /// <param name="bValue">B值</param>
        /// <param name="floatingRate">下浮率Δ</param>
        /// <param name="floatingK">下浮系数K</param>
        /// <param name="basePrice">评标基准价</param>
        public BasePriceEntry(double bValue, double floatingRate, double floatingK, double basePrice)
        {
            BValue = bValue;
            FloatingRate = floatingRate;
            FloatingK = floatingK;
            BasePrice = basePrice;
        }

        // 私有字段：下浮率Δ
        private double _floatingRate;

        /// <summary>
        /// 下浮率Δ 的属性，支持属性变更通知
        /// </summary>
        public double FloatingRate
        {
            get { return _floatingRate; }
            set
            {
                // 只有在值发生变化时才更新并触发属性变更事件
                if (_floatingRate != value)
                {
                    _floatingRate = value;
                    // 使用 CallerMemberName 特性，自动获取属性名
                    OnPropertyChanged(nameof(FloatingRate));
                }
            }
        }

        // 私有字段：下浮系数K
        private double _floatingK;

        /// <summary>
        /// 下浮系数K 的属性，支持属性变更通知
        /// </summary>
        public double FloatingK
        {
            get { return _floatingK; }
            set
            {
                // 只有在值发生变化时才更新并触发属性变更事件
                if (_floatingK != value)
                {
                    _floatingK = value;
                    OnPropertyChanged(nameof(FloatingK));
                }
            }
        }

        // 私有字段：B值
        private double _bValue;

        /// <summary>
        /// B值 的属性，支持属性变更通知
        /// </summary>
        public double BValue
        {
            get { return _bValue; }
            set
            {
                // 只有在值发生变化时才更新并触发属性变更事件
                if (_bValue != value)
                {
                    _bValue = value;
                    OnPropertyChanged(nameof(BValue));
                }
            }
        }

        // 私有字段：评标基准价
        private double _basePrice;

        /// <summary>
        /// 评标基准价 的属性，支持属性变更通知
        /// </summary>
        public double BasePrice
        {
            get { return _basePrice; }
            set
            {
                // 只有在值发生变化时才更新并触发属性变更事件
                if (_basePrice != value)
                {
                    _basePrice = value;
                    OnPropertyChanged(nameof(BasePrice));
                }
            }
        }

        // INotifyPropertyChanged 接口的实现
        /// <summary>
        /// 属性变更事件，用于通知绑定的UI控件属性已发生变化
        /// </summary>
        public event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// 触发属性变更事件的方法
        /// </summary>
        /// <param name="propertyName">发生变化的属性名称，使用 CallerMemberName 特性自动获取</param>
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            // 使用安全的方式调用事件，确保订阅者不为空
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}